#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>

int main()
{	
	int fd = open("log.txt", O_CREAT|O_WRONLY|O_TRUNC, 0666);
	if(fd < 0)
	{
		perror("open");
		return 1;
	}

	close(1);
	dup2(fd, 1);
	
	printf("hello Linux!!\n");
	fprintf(stdout, "hello stdout\n");		

	
	return 0;
}

//int main()
//{
//	printf("hello printf\n"); //stdout
//	perror("error"); //stderr
//	
//	fprintf(stdout, "hello stdout!!!\n");
//	fprintf(stderr, "hello stderr!!!\n");
//	return 0;
//}

//int main()
//{
//	close(0);
//
//	int fd = open("log.txt", O_RDONLY|O_CREAT, 0666);
//	if(fd < 0)
//	{
//		perror("open");
//		return 1;
//	}
//
//	char str[40];
//	while(scanf("%s", str) != EOF)
//	{
//		printf("%s\n", str);
//	}
//
//	close(fd);
//	return 0;
//}

//int main()
//{
//	close(1);
//
//	int fd = open("log.txt", O_RDWR|O_CREAT|O_APPEND, 0666);
//	if(fd < 0)
//	{
//		perror("open");
//		return 1;
//	}
//	
//	printf("hello world!!!\n");
//	printf("hello world!!!\n");
//	printf("hello world!!!\n");
//	printf("hello world!!!\n");
//	printf("hello world!!!\n");
//
//	fflush(stdout);
//	close(fd);
//
//	return 0;
//}

//int main()
//{
//	close(0);
//	close(2);
//	int fd1 = open("log1.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
//	int fd2 = open("log2.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
//	int fd3 = open("log3.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
//	int fd4 = open("log4.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
//	int fd5 = open("log5.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
//
//	printf("fd1:%d\n", fd1);
//	printf("fd2:%d\n", fd2);
//	printf("fd3:%d\n", fd3);
//	printf("fd4:%d\n", fd4);
//	printf("fd5:%d\n", fd5);
//
//	return 0;
//}


//int main()
//{
//	int fd = open("log.txt", O_RDONLY, 0666);
//	if(fd < 0)
//	{
//		perror("open");
//		return 1;
//	}
//
//	char ch;
//	while(1)
//	{
//		ssize_t s = read(fd, &ch, 1);
//		if(s <= 0) //返回值为0或者不为1结束
//		{
//			break;				
//		}	
//		write(1, &ch, 1);
//	}
//
//	close(fd);	
//
//	return 0;
//}

//int main()
//{
//	int fd = open("log.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666);
//	if(fd < 0)
//	{
//		perror("open");
//		return 1;
//	}
//	
//	const char* msg = "hello world!\n";
//	for(int i = 0; i < 5; i++)
//	{
//		write(fd, msg, strlen(msg));
//	}
//
//	close(fd);
//
//	return 0;
//}

//int main()
//{
//	int fd = open("test.txt",O_RDONLY);
//
//	printf("fd: %d\n", fd);
//
//	return 0;
//}

//int main()
//{
//	umask(0); //默认掩码设置为0
//
//	int fd1 = open("log.txt1", O_RDONLY|O_CREAT|O_TRUNC, 0666);
//	int fd2 = open("log.txt2", O_RDONLY|O_CREAT|O_TRUNC, 0666);
//	int fd3 = open("log.txt3", O_RDONLY|O_CREAT|O_TRUNC, 0666);
//	int fd4 = open("log.txt4", O_RDONLY|O_CREAT|O_TRUNC, 0666);
//	int fd5 = open("log.txt5", O_RDONLY|O_CREAT|O_TRUNC, 0666);
//
//	printf("fd1: %d\n", fd1);
//	printf("fd2: %d\n", fd2);
//	printf("fd3: %d\n", fd3);
//	printf("fd4: %d\n", fd4);
//	printf("fd5: %d\n", fd5);
//
//	return 0;
//}


//#define ONE 1 //1 0001
//#define TWO (1<<1) //2 0010
//#define THREE (1<<2) //4 0100
//#define FOUR (1<<3) //8 1000
//
//void show(int flags)
//{
//	if(flags&ONE) printf("function 1!\n");
//	if(flags&TWO) printf("function 2!\n");
//	if(flags&THREE) printf("function 3!\n");
//	if(flags&FOUR) printf("function 4!\n");
//}
//
//int main()
//{
//
//	show(ONE);
//
//	show(ONE|TWO);
//
//	show(ONE|TWO|THREE);
//
//	show(FOUR);
//
//	return 0;
//}
